package com.springboot.config;

import org.springframework.cache.CacheManager;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.cache.concurrent.ConcurrentMapCache;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import java.util.Arrays;

/**
 * 缓存管理器配置
 *
 * @author yexi
 */
@Configuration
public class CacheManagerConfiguration {

    /**
     * 可以创建一个或多个缓存管理器，当存在多个时，则需要通过 @Primary 注解指定默认采用的管理器。
     * 缓存管理器的实现你可以使用 Spring 自带的 SimpleCacheManager，也可以通过 Ehcache、Redis 等第三方缓存来实现。
     */
    @Bean
    @Primary
    public CacheManager simpleCacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        // 创建名为"users"和"articles"的两个缓存
        cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("users"), new ConcurrentMapCache("articles")));
        return cacheManager;
    }

    @Bean
    public CacheManager caffeineCacheManager() {
        CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
        // 创建名为"users"和"articles"的两个缓存
        caffeineCacheManager.setCacheNames(Arrays.asList("users", "articles"));
        return caffeineCacheManager;
    }
}
